package dao;

import hintEmCimaDoMetodo.SingletonArmazenaCabecalhoMetodo;
import hintEmCimaDoMetodo.SingletonExcecaoQueOUsuarioEscolheu;

import java.io.File;
import java.io.FilenameFilter;
import java.net.URI;
import java.util.LinkedList;

import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.IJavaProject;

import acharOndeMetodoEhChamado.NomeDoMetodoExcecaoTratadorESinalizador;
import acharOndeMetodoEhChamado.SingletonDadosLinhasTabela;

public class PegaCaminhoAteTxtExcecoesAtravesDeIProject 
{
	
	private static PegaCaminhoAteTxtExcecoesAtravesDeIProject instancia;
	private String caminhoAteTxtExcecoes;
	
	public PegaCaminhoAteTxtExcecoesAtravesDeIProject()
	{
		
	}
	
	public static PegaCaminhoAteTxtExcecoesAtravesDeIProject getInstance()
	{
		if(instancia == null)
		{
			instancia = new PegaCaminhoAteTxtExcecoesAtravesDeIProject();
		}
		
		return instancia;
	}
	
	public void pegarCaminhoAteTxtUsandoIProject(IJavaProject project)
	{
		URI rawUri = project.getProject().getLocationURI();
		String StringRawUri = rawUri.getPath();
		String stringSemBarraInicial = StringRawUri.replaceFirst("/", "");
		this.caminhoAteTxtExcecoes = stringSemBarraInicial + "/src/result.dat";
		
		//File dir = new File(this.caminhoAteTxtExcecoes);
		
		/*File[] foundFiles = dir.listFiles(new FilenameFilter() {
		    public boolean accept(File dir, String name) {
		        return name.startsWith("EALog");
		    }
		});*/
		
		
		
		
		String cabecalho = SingletonArmazenaCabecalhoMetodo.getInstance().getCabecalhoMetodoUsadoPorDAO();
		
		String excecaoUsuarioEscolheu = 
				SingletonExcecaoQueOUsuarioEscolheu.getInstance().getExcecaoUsuarioEscolheu();
		InterfaceDAOPegaExcecoesEhandlers dao = new DAOPegaExcecoesEhandlers();
		
		if(excecaoUsuarioEscolheu.compareTo("") == 0)
		{
			//usuario escolheu ver todas as excecoes do metodo
			LinkedList<NomeDoMetodoExcecaoTratadorESinalizador> linhasTabela = dao.pegarDadosTabelaAPartirDoTxt(cabecalho);
			
			for(int i = 0; i < linhasTabela.size(); i++)
			{
				SingletonDadosLinhasTabela.getInstance().adicionarNovoDadoLinhaTabela(linhasTabela.get(i));
			}
		}
		else
		{
			//usuario quer ver fluxo apenas de uma excecao especifica
			LinkedList<NomeDoMetodoExcecaoTratadorESinalizador> linhasTabela = dao.pegarDadosTabelaAPartirDoTxt(cabecalho,excecaoUsuarioEscolheu);
			
			for(int i = 0; i < linhasTabela.size(); i++)
			{
				SingletonDadosLinhasTabela.getInstance().adicionarNovoDadoLinhaTabela(linhasTabela.get(i));
			}
		}
		
	}
	
	public LinkedList<NomeDoMetodoExcecaoTratadorESinalizador> pegarExcecoesDoTxtUsandoIProject(IJavaProject project,String cabecalhoMetodo)
	{
		URI rawUri = project.getProject().getLocationURI();
		String StringRawUri = rawUri.getPath();
		String stringSemBarraInicial = StringRawUri.replaceFirst("/", "");
		this.caminhoAteTxtExcecoes = stringSemBarraInicial + "/src/result.dat";
		
		//File dir = new File(this.caminhoAteTxtExcecoes);
		/*File[] foundFiles = dir.listFiles(new FilenameFilter() {
		    public boolean accept(File dir, String name) {
		        return name.startsWith("EALog");
		    }
		});
		
		if(foundFiles != null && foundFiles.length > 0)
		{
			this.caminhoAteTxtExcecoes = this.caminhoAteTxtExcecoes + foundFiles[0].getName();
		}
		else
		{
			this.caminhoAteTxtExcecoes = this.caminhoAteTxtExcecoes + "arquivonaoencontrado.txt";
		}*/
		
		InterfaceDAOPegaExcecoesEhandlers dao = new DAOPegaExcecoesEhandlers();
		
		LinkedList<NomeDoMetodoExcecaoTratadorESinalizador> linhasTabela = dao.pegarDadosTabelaAPartirDoTxt(cabecalhoMetodo);
		
		return linhasTabela;
	}

	public String getCaminhoAteTxtExcecoes() {
		return caminhoAteTxtExcecoes;
	}

	public void setCaminhoAteTxtExcecoes(String caminhoAteTxtExcecoes) 
	{
		this.caminhoAteTxtExcecoes = caminhoAteTxtExcecoes;
	}

}
